Bar code scanners and wand-based readers ("readers") scan and decode typical bar codes from linear symbologies. "Linear symbologies" are symbologies where data is encoded as parallel arrangements of alternating, multiple-width bars and spaces (e.g., U.P.C., Code 39, Code 93, etc.). Linear symbologies, as well as other symbologies, encode "data characters" (i.e., human-readable characters) as "symbol characters," which are typically alternating bars and spaces. In typical linear symbologies, such as Code 39, each bar and space, or "element," in the symbol is one of four narrow and wide elements: a single-width bar, a single-width space, a double-width bar or a double-width space. More complex linear or stacked symbologies employ a greater number of widths for each element.
Bar code readers typically convert symbol characters to data characters by scanning an area to produce a reflectance signal or bar code "profile" that is generally an analog signal representing the modulated light reflected from areas of high reflectance or "spaces," and absorbed by areas of low reflectance or "bars." As a result, the profile represents the pattern of bars and spaces, or "elements," in the symbol. In a given profile, a peak corresponds to a space (high reflectivity), while a valley corresponds to a bar (low reflectivity, relative to the space). The width of each peak or valley generally indicates the width of the corresponding bar or space whose reflectance produced the peak or valley.
Many bar code readers employ "wave shaping" circuits that essentially square off the profile based on transitions or vertical edges between the peaks and valleys in the profile. Counting circuits then produce a series of counts that indicate the horizontal widths of the bars and spaces from the linear bar code symbol. A typical locating algorithm in the reader locates a bar code symbol by examining the series of counts to attempt to find a quiet zone and an adjacent start/stop symbol character. A "quiet zone" is a clear space, containing no dark marks, that precedes or follows a symbol, often next to a start or stop character. "Start and stop characters" are symbol characters, unique to a given symbology, that indicate the beginning and end of a given symbol, respectively. Typically, a quiet zone has a size that is about ten times greater than bars that precede or follow the quiet zone. Therefore, the reader examines a series of counts and attempts to find a count that is approximately ten times greater than a count which follows thereafter. Once the quiet zone and adjacent start/stop character have been located, standard decode algorithms are employed to decode series of counts from the symbol into data characters.
Wand-type readers contact the surface on which the bar code is printed. Such readers often produce profiles having sharp contrast between the peaks and valleys and thus the spaces and bars represented by the profile are easily detectable by circuitry in the reader. However, wand-type readers require the wand to contact the surface on which the bar code is printed, and are thus impractical in situations where a user cannot or does not wish to physically contact the bar code. Requiring the user to manually contact each bar code is time consuming and reduces productivity.
Non-contact bar code readers are currently available such as laser scanning and linear charge-coupled device ("CCD") readers. Laser scanning-type readers employ a scanning beam of laser light which impinges on and is reflected from a bar code. A photodetector receives the reflected light and converts it into a modulated electrical signal that comprises the profile for the bar code.
Wand-based readers and laser scanners are often adequate to scan and decode linear symbologies. However, newer data collection symbologies have departed from the typical linear symbologies to create stacked or area symbologies in order to increase "information density," i.e., the amount of information encoded within a given area. "Stacked symbologies," or multi-row symbologies, employ several adjacent rows of multiple-width bars and spaces (e.g., Code 49, PDF417, etc.). "Area symbologies" or two-dimensional matrix symbologies, employ arrangements of regular polygon-shaped data cells where the center-to-center distance of adjacent data cells is uniform (e.g., MaxiCode, Code One, Data Matrix, Aztec Code, etc.).
Such stacked and area symbologies typically require image or vision-based readers that produce two-dimensional images of a field of view. Image or vision-based readers employ two-dimensional semiconductor arrays, vidicons, or other suitable light receiving elements that receive an image of a bar code and, based on the light reflected therefrom, process the image to produce the profile.
Due to optical system limitations inherent in laser- or image-type readers, these readers have a specified depth-of-field within which bar codes can be read. Some laser- or image-type readers employ autofocus systems to increase the depth-of-field for the reader. However, even readers with autofocus systems are limited by the depth-of-field of the autofocus system. Additionally, autofocus systems are costly, slow and have significant power requirements compared with other electronics in hand-held readers.
If a reader scans or images a bar code out of its depth-of-field, the resulting profile will exhibit "closure." Positive ink spread in a bar code or excessive noise in a profile can also produce closure. Closure in a bar code profile is evidenced by some recognizable peaks and valleys, but also ripples in the middle of the profile. Closure in a bar code profile generally indicates that the wide elements in the profile are resolved, but that the narrow elements are unresolved. With respect to readers, a space or bar is "resolved" if the reader is able to identify a peak or valley in the profile that corresponds to the given space or bar. Some profiles may represent narrow elements by small peaks, valleys or ripples that are visually recognizable, but which are essentially undetectable by current readers
Currently available readers are unable to decode profiles having closure. As noted above, these readers typically employ wave shaping circuits to find the edges of bar code elements represented in a profile. To decode each element in the bar code, these electronic circuits locate an edge of an element as a point where, for example, the reflectance in the profile reaches a fixed distance from a peak or valley. Currently available readers cannot decode profiles where the narrow elements are out-of-focus or lost in the profile (i.e., profile closure) because the narrow elements fail to produce any significant peaks or valleys and thus the wave shaping circuitry is unable to locate any edges in the profile corresponding to these elements. Since current wave shaping circuits cannot locate the narrow elements in a profile when closure occurs, the circuits cannot decode the bar code.
Due to the shortcomings of such circuits, a user of a hand-held non-contact reader without autofocus must adjust the distance at which the user holds the reader from the bar code until the bar code is within the depth-of-field (i.e., in-focus) for the reader. Once in-focus, the circuitry can decode the bar code. If a user is attempting to read bar codes at varying distances, the user must constantly move the reader to place a given bar code within the focus for the reader so as to read that bar code. Consequently, while non-contact readers eliminate the need to contact the surface on which the bar code is printed, reading each bar code is still time consuming since the user must move the reader to a specific in-focus position for the reader. Further problems occur when the reader is mounted in a fixed location (and lacks autofocus capabilities), and bar codes to be read pass by the reader at different distances. For example, when the reader is mounted above a conveyor on which boxes of varying heights are carried, and the reader attempts to read bar codes atop the boxes, only those bar codes within the reader's fixed depth-of-field will be decoded. Also, when a user attempts to read an X-dimension that is below the capability of the reader, closure results and the symbol is unreadable by normal methods.